// Magic Software, Inc.
// http://www.magic-software.com
// Copyright (c) 2000, All Rights Reserved
//
// Source code from Magic Software is supplied under the terms of a license
// agreement and may not be copied or disclosed except in accordance with the
// terms of that agreement.  The various license agreements may be found at
// the Magic Software web site.  This file is subject to the license
//
// RESTRICTED USE SOURCE CODE
// http://www.magic-software.com/License/restricted.pdf

#ifndef MGCPOLYLINE_H
#define MGCPOLYLINE_H

#include "MgcGeometry.h"


class MgcPolyline : public MgcGeometry
{
    MgcDeclareRTTI;
    MgcDeclareStream;

public:
    // Construction and destruction.  MgcPolyline accepts responsibility for
    // deleting the input arrays.
    MgcPolyline (unsigned int uiVertexQuantity, MgcVector3* akVertex,
        MgcVector3* akNormal, MgcColor* akColor, MgcVector2* akTexture,
        bool bClosed);

    void Reconstruct (unsigned int uiVertexQuantity, MgcVector3* akVertex,
        MgcVector3* akNormal, MgcColor* akColor, MgcVector2* akTexture,
        bool bClosed);

    // line access
    bool& Closed () const;
    unsigned int GetSegmentQuantity () const;
    void GetSegment (unsigned int uiL, MgcVector3& rkV0,
        MgcVector3& rkV1) const;

    // updates
    virtual void UpdateModelNormals ();

protected:
    MgcPolyline ();

    // drawing
    virtual void Draw (MgcRenderer& rkRenderer);

    // polyline is open or closed
    bool m_bClosed;
};

MgcSmartPointer(MgcPolyline);
MgcRegisterStream(MgcPolyline);
#include "MgcPolyline.inl"

#endif
